在wordpress中查询post类型的文章分页是没问题的, 但是查询page和自定义类型的分页会出现404问题, 我们就来解决这个问题.

必备概念

  1. wordpress可以自定义许多文章类型, wordpress自带的有就是post和page类型.

  2. 当我们向wordpress发出请求时, wordpress会解析我们的请求参数, 然后把这些参数给WP_Query对象进行查询, 最后把查询结果保存在一系列变量中, 而我们使用the_title()等函数的时候, 就是获取这些变量的值.

  3. wordpress自带很多事件, 我们可以把函数注册到这些事件中, 来修改wordpress执行的某些过程.

问题原因

当我们查询post类型文章的分页是不会出问题的, 但当我们查询自定义类型或page类型文章分页时出现404问题, 很显然是wordpress的WP_Query查询结果出了问题, 而wordpress的查询是通过我们传递的参数进行的, 那么追根溯源一定是我们参数有问题.

我们以http://q5.abc/category/md5gj/page/2做举例, md5gj分类下面全是page类型的文章, 下图是打印出的WP_Query对象内容, 其中最关键的就是query参数, 里面包含了我们请求的查询条件:

20220126083632-2022-01-26-08-36-32

由上图可知我们的query只包含了paged=2category_name=md5gj这两个参数, 但如果大家去看WP_Query的文档就知道, 还有一个叫做post_type的参数, 该参数默认是post类型, 也就是说上图的查询条件实际是下面这样的:

paged=2
category_name=md5gj
post_type=post

由此我们可以知道为什么当查询page类型或自定义文章类型时, 会报404错误了, 因为wordpress不知道你要查询什么文章类型, 全部默认是post类型.

解决方法

既然它不知道, 我们在查询之前告诉wordpress要查询的文章类型就行了, 使用到wordpress的request事件, 下面是示例代码, 这段代码还调整了排序规则:

  public function modifyQueryParams($qs){
    $qs['post_type'] = 'page';
    $qs['order'] = 'ASC';
    return $qs;
  }

  add_filter('request','modifyQueryParams');

下图是修改参数后的Wp_Query对象的内容:

20220126085247-2022-01-26-08-52-48

参考资料

wordpress 3.8.1 category page 2 error 404 not found / custom post type 自定义帖子类型分页404修复? 修复wordpress分类分页无效

THE END
推荐文章
  • 小程序背景图铺满整个屏幕

  • mysql异常 Error 1153 - Got a packet bigger than 'max_allowed_packet' bytes

  • div遮罩无法覆盖全部页面和遮罩弹出后滑动条还能滑动

  • 黄帝内经-上古天真论

  • sequelize查询条件空字符串或null

  • python如何安装包管理器pip

  • linux安装mongodb社区版

  • wordpress重新安装ripro主题

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字